package com.xujiang.common.uiutil;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.NotificationCompat;

import com.xujiang.common.R;

import static android.content.Context.NOTIFICATION_SERVICE;

/**
 * 通知的帮助类
 *
 * @author xujiang
 * @version 2017-05-12 10:47
 */
public class NotificationHelper {

    /**Notification 的管理类*/
    public static NotificationManager mNotificationManager;
    /**实例化通知栏构造器NotificationCompat.Builder*/
    public static NotificationCompat.Builder mBuilder;
    /** Notification的ID */
    public static int notifyId = 100;


    public static void initNotification(Context context){
        initService(context);
        initNotify(context);
    }

    /**
     * Notification为通知信息类，它里面对应了通知栏的各个属性
     * NotificationManager ：  是状态栏通知的管理类，负责发通知、清除通知等操作。
     * 注意：NotificationManager 是一个系统Service，所以必须通过 
     * getSystemService(NOTIFICATION_SERVICE)方法来获取，
     */
    public static void initService(Context context) {
        mNotificationManager = (NotificationManager)context.getSystemService(NOTIFICATION_SERVICE);
    }

    /**
     * 清除指定id的通知
     * @param notifyId
     */
    public static void clearNotify(int notifyId){
        mNotificationManager.cancel(notifyId);  //);//消除对应ID的通知
    }

    /**
     * 清楚创建的所有通知
     */
    public static void clearAllNotify(){
        mNotificationManager.cancelAll(); //消除创建的所有通知

    }

    /**
     * pendingIntent  延迟的Intent
     *PendingIntent可以支持三种意图：启动Activity,启动Service，启动Broadcast
     *
     * @param flags
     * @return
     */
    public static PendingIntent getDefalutIntent(Context context,int flags){
        PendingIntent pendingIntent = PendingIntent.getActivity(context,1,new Intent(),flags);
        return pendingIntent;
    }

    /**
     * 初始化Notifiaction
     */
    public static void initNotify(Context context){
        mBuilder = new NotificationCompat.Builder(context);
        mBuilder.setContentTitle("测试标题")  //标题
                .setContentText("测试类容")  //设置通知栏显示内容
                .setContentIntent(getDefalutIntent(context,Notification.FLAG_AUTO_CANCEL))
                //.setNumber(number)  //显示数量
                .setTicker("测试通知来了") //通知首次出现在通知栏，带上升动画效果的
                .setWhen(System.currentTimeMillis()) //通知产生的时间，会在通知信息里显示
                .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知的优先级
                .setAutoCancel(true) //设置这个标志当用户单击面板就可以让通知自动取消
                .setOngoing(false) //ture，设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
                .setDefaults(Notification.DEFAULT_ALL) //向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置，使用defaults属性，可以组合：
                //Notification.DEFAULT_ALL  Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission
                .setSmallIcon(R.mipmap.ic_launcher);
    }


    /** 默认的通知 */
    public static  void showdefaultNotify(CharSequence title,CharSequence content,CharSequence tickerText){
        mBuilder.setContentTitle(title)
                .setContentText(content)
                //				.setNumber(number)//显示数量
                .setTicker(tickerText);//通知首次出现在通知栏，带上升动画效果的,在小米测试无效
        showNotify(mBuilder.build());
        //		mNotification.notify(getResources().getString(R.string.app_name), notiId, mBuilder.build());
    }

    /**
     * 设置常驻型通知
     */
    public static void setFlagsResident(){
        Notification build = mBuilder.build();
        build.flags = Notification.FLAG_ONGOING_EVENT;  //FLAG_ONGOING_EVENT 在顶部常驻，可以调用下面的清除方法去除  FLAG_AUTO_CANCEL  点击和清理可以去调
        showNotify(build);
    }

    /**
     * 显示通知
     * @param notification
     */
    public static void showNotify(Notification notification){
        mNotificationManager.notify(notifyId,notification);
    }


}
